package code15Lambda表达式;

import java.sql.Connection;
import java.util.Arrays;
import java.util.List;

/**
 * @author 黄衡熙
 * @version 1.0
 */
public class Test09_中间操作 {
    public static List<Integer> list = Arrays.asList(5, 1, 3, 9, 13, 16, 8, 2, 18, 9, 7, 1);

    public static void main(String[] args) {
        //testFilter();
        //testDistinct();
        //testLimit();
        //testSkip();
       // findPage(2,5);
        //testMap();
        testSorted();
        //testSortedComparator();
    }
/*
* 过滤操作*/
    public static void testFilter() {
        // 创建对象
        list.stream()
                // 中间操作,获取奇数
                .filter(i -> i % 2 != 0)
                // 终止操作
                .forEach(System.out::println);
    }
    /*
    * 去重操作
    * */
    public static void testDistinct() {
        list.stream()
                .distinct()
                .forEach(System.out::println);
    }
    /*
    * 截断流
    * 此时的索引不从零开始
    * */
    public static void testLimit() {
        list.stream()
                .limit(5)
                .forEach(System.out::println);
    }
    /*
    * 跳过元素，返回一个扔掉了前n个元素的流，既从概述开始的后面的所有元素流
    * 如果不足n个返回空流
    * 与limit联合使用，可以实现类似于分页效果
    * */
    public static void testSkip(){
        list.stream()
                .skip(3)
                .forEach(System.out::println);
    }
    public static void findPage(Integer pageNo, Integer pageSize) {
        // 第二页,每页三条数据
//        list.stream()
//                .skip(3)
//                .limit(3)
//                .forEach(System.out::println);

        // 分页规律
        list.stream()
                .skip((pageNo - 1) * pageSize)
                .limit(pageSize)
                .forEach(System.out::println);
    }
    /*
    * 接收函数式接口作为参数，该函数会被应用到每个元素上，并将其映射成一个新的元素
    * 既对流中的元素做二次处理
    * 此处把流中的元素做了二倍处理*/
    public static void testMap() {
        list.stream()
                .map(i -> i * 2)
                .forEach(System.out::println);
    }
    /*
    * 产生一个新流, 其中按照自然顺序进行排序
    * 如果是字符串, 则按照字典顺序进行排序*/
    public static void testSorted() {
        list.stream()
                .distinct()
                .sorted()
                .forEach(System.out::println);
        List<String> list2 = Arrays.asList("3", "11", "12", "1", "101", "21", "2");
        System.out.println("****************************");
        list2.stream()
                .distinct()
                .sorted()
                .forEach(System.out::println);
    }

    public static void testSortedComparator() {
        list.stream()
                .distinct()
                .sorted((i1, i2) -> i2 - i1)
                .forEach(System.out::println);
        List<String> names = Arrays.asList("admin", "jack", "tom");
        System.out.println("***************************");
        names.stream()
                .sorted((s1, s2) -> s1.length() - s2.length())
                .forEach(System.out::println);
    }
}
